package com.example.sunsg.okhttptest.autopackage;

import android.graphics.Path;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;

/**
 *
 */
public class AutoPackage {

	private static final String FILEPATH = "apk/BreadTrip.apk";
	private static final String CHANNELFILENAME = "META-INF/btchannel_%s";

	private static final String CHANNEL_PREFIX = "/META-INF/";
	private static final String CHANNEL_PATH_MATCHER = "glob:/META-INF/btchannel_*";

	public static void main(String[] args) throws Exception {

//		autoPackage();

	}

//	public static final void autoPackage() throws Exception {
//		System.out.println("开始打包");
//		long start = System.currentTimeMillis();
//
//		System.out.println("读取配置文件");
//
//		Properties prop = new Properties();
//		prop.load(new FileInputStream("config/version.properties"));
//		String version = prop.getProperty("version");
//
//		String rootPath = new File("").getCanonicalPath() + "/V" + version + "/";
//		Files.createDirectories(Paths.get(rootPath));
//
//		System.out.println("清空旧打包文件");
//		removeRecursive(Paths.get(rootPath));
//
//		prop.clear();
//		prop.load(new FileInputStream("config/channels.properties"));
//		if (prop.size() > 0) {
//			System.out.println("共有渠道： " + prop.size() + "个");
//
//			Set<Object> channels = sortChannels(prop.keySet());
//			for (Object o : channels) {
//				if (o != null && o.toString().length() > 0) {
//					createApk(rootPath, o.toString(), version);
//				}
//			}
//
//		} else {
//			System.out.println("没有渠道");
//		}
//		System.out.println("打包结束," + "文件夹路径：" + rootPath + "，耗时：" + (System.currentTimeMillis() - start) + "ms");
//	}
//
//	/**
//	 * 按渠道排序
//	 *
//	 * @param set
//	 * @return
//	 */
//	private static Set<Object> sortChannels(Set<Object> set) {
//		TreeSet<Object> treeSet = new TreeSet<Object>(new Comparator<Object>() {
//
//			@Override
//			public int compare(Object o1, Object o2) {
//				try {
//					int channel1 = Integer.parseInt(o1.toString().split("_")[1]);
//					int channel2 = Integer.parseInt(o2.toString().split("_")[1]);
//					return channel1 - channel2;
//				} catch (Exception e) {
//					throw new IllegalArgumentException("channel不符合命名规范,输入为： " + o1.toString() + " " + o2.toString()
//							+ ",应该为：officail_0");
//				}
//			}
//		});
//		treeSet.addAll(set);
//		return treeSet;
//	}
//
//	/**
//	 * 创建apk
//	 *
//	 * @param rootPath
//	 * @param channel
//	 * @param version
//	 * @throws Exception
//	 */
//	private static void createApk(String rootPath, String channel, String version) throws Exception {
//		String channelName = String.format(CHANNELFILENAME, channel);
//
//		Path path = Paths.get(getApkName(channel, rootPath, version));
//		Files.createDirectories(Paths.get(rootPath));
//		Path dest = Files.copy(Paths.get(FILEPATH), path);
//
//		Map<String, String> env = new HashMap<String, String>();
//		env.put("create", "true");
//		URI uri = URI.create("jar:" + dest.toUri());
//		try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
//			Path apkpath = fs.getPath(channelName);
//			deleteChannelFile(fs.getPath(CHANNEL_PREFIX));
//			Files.createFile(apkpath);
//		}
//		System.out.println("生成渠道: " + path.getFileName());
//	}
//
//	/**
//	 * 生成apk名字
//	 *
//	 * @param channel
//	 * @param rootPath
//	 * @param version
//	 * @return
//	 */
//	private static String getApkName(String channel, String rootPath, String version) {
//		String[] channels = channel.split("_");
//		if (channels != null && channels.length == 2) {
//			return rootPath + channels[1] + "-breadtrip_" + channels[0] + "_v." + version + ".apk";
//		} else {
//			throw new IllegalArgumentException("channel不符合命名规范，输入为：" + channel + ",应该为：officail_0");
//		}
//	}
//
//	/**
//	 * 删除apk渠道文件
//	 *
//	 * @param rootPath
//	 * @throws IOException
//	 */
//	private static void deleteChannelFile(Path rootPath) throws IOException {
//		ChannelFileVisitor visitor = new ChannelFileVisitor();
//		if (Files.exists(rootPath)) {
//			Files.walkFileTree(rootPath, visitor);
//			List<Path> pathList = visitor.getChannelFileList();
//			if (pathList != null && !pathList.isEmpty()) {
//				for (Path path : pathList) {
//					Files.delete(path);
//					System.out.println("删除初始apk中渠道文件: " + path.getFileName());
//				}
//			}
//		}
//	}
//
//	/**
//	 * 删除初始包已经存在的渠道文件
//	 *
//	 * @Title: AutoPackage.java
//	 * @Description:
//	 * @author jiwei@breadtrip.com
//	 * @date 2015年3月17日  下午3:36:10
//	 * @version V1.0
//	 */
//	private static class ChannelFileVisitor extends SimpleFileVisitor<Path> {
//		private List<Path> pathList;
//		private PathMatcher matcher = FileSystems.getDefault().getPathMatcher(CHANNEL_PATH_MATCHER);
//
//		public List<Path> getChannelFileList() {
//			return pathList;
//		}
//
//		@Override
//		public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
//			if (matcher.matches(file)) {
//				if (pathList == null) {
//					pathList = new ArrayList<Path>();
//				}
//				pathList.add(file);
//			}
//			return FileVisitResult.CONTINUE;
//		}
//	}
//
//	/**
//	 * 清空文件
//	 *
//	 * @param path
//	 * @throws IOException
//	 */
//	private static void removeRecursive(final Path path) throws IOException {
//		Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
//			@Override
//			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
//				delete(file);
//				return FileVisitResult.CONTINUE;
//			}
//
//			@Override
//			public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
//				delete(file);
//				return FileVisitResult.CONTINUE;
//			}
//
//			@Override
//			public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
//				if (exc == null) {
//					delete(dir);
//					return FileVisitResult.CONTINUE;
//				} else {
//					throw exc;
//				}
//			}
//
//			private void delete(Path dir) throws IOException {
//				if (!dir.getFileName().equals(path.getFileName())) {
//					Files.delete(dir);
//					System.out.println("删除文件：" + dir.getFileName());
//				}
//			}
//		});
//	}
}
